﻿using System;
using System.Web.UI.WebControls;
using Portal.API;

namespace Portal
{
	/// <summary>
	/// Summary description for ProcessModule.
	/// </summary>
	public partial class ProcessModule : System.Web.UI.Page
	{
		protected void Page_Load(object sender, System.EventArgs e)
		{
			// Put user code to initialize the page here
//			if (Request.QueryString["mr"] == null)
//				Response.Redirect(Request.Url.PathAndQuery + "?mr=80c9b68a-72bc-4b93-b49e-7c498af242c5&tr=baongay");
		}

		protected override void CreateChildControls()
		{
			//if (Request.ServerVariables["HTTP_MR"] != null && Request.ServerVariables["HTTP_TR"] != null)
			if (Request.QueryString["ModuleRef"] != null && Request.QueryString["TabRef"] != null)
			{
				//LoadModuleContent(Request.ServerVariables["HTTP_TR"], Request.ServerVariables["HTTP_MR"]);
				LoadModuleContent(Request.QueryString["TabRef"], Request.QueryString["ModuleRef"]);
			}
		}

		private void LoadModuleContent(string _strTabRef, string _strModuleRef)
		{
			PortalDefinition _objPortal = PortalDefinition.Load();
			PortalDefinition.Tab _objTab = _objPortal.GetTab(_strTabRef);

			// Khởi tạo Module
			Module _objModuleControl = null;
			CachedModule _objCachedModuleControl = null;
			
			if (_objTab != null)
			{
				PortalDefinition.Module _objModuleDefinition = _objTab.GetModule(_strModuleRef);

				// Kiểm tra người dùng có quyền hiển thị Module hay không
                ChannelUsers objUser = new ChannelUsers();
                if (objUser.HasViewRights(Page.User, _objModuleDefinition.roles))
				{
					// Nạp các thông số về Module
					_objModuleDefinition.LoadModuleSettings();

					try
					{
						// Kiểm tra xem có thông số nào được xác lập không
						// Xây dựng chuỗi đường dẫn đến tệp ASCX
						string _strModuleSrc = Config.GetModuleVirtualPath(_objModuleDefinition.type);
						_strModuleSrc += _objModuleDefinition.moduleSettings == null ? _objModuleDefinition.type + ".ascx" : _objModuleDefinition.moduleSettings.ctrl;

						if (_objModuleDefinition.CacheTime <= 0)
						{
							// Nếu Module không sử dụng Cache
							_objModuleControl = (Module) this.LoadControl(_strModuleSrc);

							// Khởi tạo nội dung Module
							_objModuleControl.InitModule(_objTab.reference,
							                             _objModuleDefinition.reference,
							                             _objModuleDefinition.type,
							                             Config.GetModuleVirtualPath(_objModuleDefinition.type),
							                             true);
						}
						else
						{
							// Nếu Module có sử dụng Cache
							_objCachedModuleControl = new CachedModule();
							_objCachedModuleControl.ModuleCacheTime = _objModuleDefinition.CacheTime;

							// Khởi tạo nội dung Module
							_objCachedModuleControl.InitModule(_objTab.reference,
							                                   _objModuleDefinition.reference,
							                                   _objModuleDefinition.type,
							                                   Config.GetModuleVirtualPath(_objModuleDefinition.type),
							                                   true,
							                                   _strModuleSrc);
						}
					}
					catch (Exception e1)
					{
						Console.Write(e1.Message);
					}
				}
			}

			Literal _ltrStartTrace = new Literal();
			Literal _ltrEndTrace = new Literal();

			_ltrStartTrace.Text = "<StartModuleTrace>";
			_ltrEndTrace.Text = "</StartModuleTrace>";
			_ltrStartTrace.EnableViewState = false;
			_ltrEndTrace.EnableViewState = false;

			this.FindControl("frmModuleContainer").Controls.Add(_ltrStartTrace);
			if (_objModuleControl != null)
			{
				this.FindControl("frmModuleContainer").Controls.Add(_objModuleControl);
			}
			else
			{
				if (_objCachedModuleControl != null)
				{
					this.FindControl("frmModuleContainer").Controls.Add(_objCachedModuleControl);
				}
			}
			this.FindControl("frmModuleContainer").Controls.Add(_ltrEndTrace);
		}

		#region Web Form Designer generated code

		override protected void OnInit(EventArgs e)
		{
			//
			// CODEGEN: This call is required by the ASP.NET Web Form Designer.
			//
			InitializeComponent();
			base.OnInit(e);
		}

		/// <summary>
		/// Required method for Designer support - do not modify
		/// the contents of this method with the code editor.
		/// </summary>
		private void InitializeComponent()
		{
		}

		#endregion
	}
}